home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 301-325 / disk_313 / uucp / uucp1.lzh / src / getty / passwd.c < prev    next >
C/C++ Source or Header  |  1990-01-10  |  2KB  |  82 lines

  1.  
  2. /*
  3.  *  PASSWD.C
  4.  *
  5.  *  (C) Copyright 1989-1990 by Matthew Dillon,  All Rights Reserved.
  6.  *
  7.  */
  8.  
  9. #include <exec/types.h>
  10. #include <libraries/dosextens.h>
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <pwd.h>
  14. #include <proto/all.h>
  15.  
  16. #include "log.h"
  17.  
  18. #define BTOCP(bp,type)  ((type)((long)bp << 2))
  19.  
  20. extern long NullFH;
  21. extern char LoginBuf[];
  22. extern char PasswdBuf[];
  23. extern char *DeviceName;
  24. extern long DeviceUnit;
  25.  
  26. static struct passwd *Pas;
  27.  
  28. CheckLoginAndPassword()
  29. {
  30.     Pas = getpwnam(LoginBuf);
  31.  
  32.     if (Pas == NULL)
  33.     return(0);
  34.     if (strcmp(Pas->pw_passwd, "*") == 0)
  35.     return(1);
  36.     if (strcmp(PasswdBuf, Pas->pw_passwd) == 0)
  37.     return(1);
  38.     return(0);
  39. }
  40.  
  41. void
  42. RunPasswdEntry()
  43. {
  44.     static char buf[256];
  45.     static char redir[128];
  46.     char *arg0 = Pas->pw_shell_arg0;
  47.     struct Process *proc = (struct Process *)FindTask(NULL);
  48.     APTR oldConsoleTask = proc->pr_ConsoleTask;
  49.     BPTR oldDir;
  50.     BPTR DirLock;
  51.  
  52.     strcpy(redir, " ");
  53.  
  54.     if (*arg0 == '*') {
  55.     ++arg0;
  56.     sprintf(redir, " >UUSER:%s/%d/R1000G1 <UUSER:%s/%d/R1000G1 ", DeviceName, DeviceUnit, DeviceName, DeviceUnit);
  57.     } else {
  58.     if (LogToStdout == 0)
  59.         strcpy(redir, " >null: <null: ");
  60.     }
  61.     if (LogToStdout == 0)
  62.     proc->pr_ConsoleTask = (APTR)BTOCP(NullFH, struct FileHandle *)->fh_Port;
  63.  
  64.     sprintf(buf, "%s%s%s -Getty -DEVICE %s -UNIT %d", arg0, redir, Pas->pw_shell_argn, DeviceName, DeviceUnit);
  65.  
  66.     DirLock = (BPTR)Lock(Pas->pw_dir, SHARED_LOCK);
  67.     if (DirLock)
  68.     oldDir = (BPTR)CurrentDir(DirLock);
  69.  
  70.     ulog(1, "Execute %s\n", buf);
  71.  
  72.     Execute(buf, NullFH, NullFH);
  73.  
  74.     proc->pr_ConsoleTask = oldConsoleTask;
  75.  
  76.     if (DirLock)
  77.     UnLock(CurrentDir(oldDir));
  78.  
  79.     ulog(1, "ran\n");
  80. }
  81.  
  82.